// 问题：输入一个英文句子，翻转句子中单词的顺序，但单词内字符的顺序不变。
// 为简单起见，标点符号和普通字母一样处理。例如输入字符串"I am a student. "，则输出"student. a am I"。


// 说明：
// 无空格字符构成一个单词。
// 输入字符串可以在前面或者后面包含多余的空格，但是反转后的字符不能包括。
// 如果两个单词间有多余的空格，将反转后单词间的空格减少到只含一个。


char* reverseWords(char* s){
    int len = strlen(s);
    int i = 0, j = len - 1, k, cnt = 0;
    int start, end;
    //删除首尾空格
    while(s[i] == ' ') i++;
    if (i > j) return "";  //全都是空格
    while(s[j] == ' ') j--;

    len = j - i + 1;
    start = i; end = j;
    char *str = malloc(sizeof(char)*(len + 1));
    i = end;
    while (1) {
        while (i >= start && s[i] != ' ') {
            i--;
        } 
        
        // word: s[i+1] ~ s[j];
        for (k = i+1; k<=j; k++) {
            str[cnt++] = s[k];
        }
        if (i < start) break;
        else str[cnt++] = ' ';
         
        j = i;  
        while(s[j] == ' ') j--; 
        i = j;
    }
    
    str[cnt] = '\0';
    return str;
}